#ifndef BIPARTI_H
#define BIPARTI_H
#include "graphe.h"
using namespace std;
#include<stack>


class Biparti : public virtual Graphe {


	private:
		vector<Sommet*> sommetsX;
                vector<Sommet*> sommetsY;

                int delta;

	public:
		Biparti();
                Biparti(const Biparti&);
                virtual ~Biparti();
		void addSommetX(Sommet*); 
		void addSommetY(Sommet*);
		void addSommetX(float,float);
		void addSommetY(float,float);
		void removeSommet(Sommet*);
		void removeSommetX(int);
		void removeSommetY(int);
		void clear();
		vector<Sommet*> getSommetsX()const;
		vector<Sommet*> getSommetsY()const;
		Sommet getSommetX(int)const;
		Sommet getSommetY(int)const;
		int getNX()const;
		int getNY()const;
		int indexOfX(Sommet);
		int indexOfY(Sommet);
		int partie(Sommet);
		void affiche()const;
		void afficheX()const;
		void afficheY()const;
                void generer(int, int);
                void generer2(int, int);
                void generer_graphe_complet(int);
                int grapheBienColore();
                int getDelta();
                int calculDelta();
                void initialisationCouleur(int);
                int nombreCouleur();
                void coloration_back_track();
                void coloration_minimal();
                void coloration_sequentielle();
                int  couleurManquante(Arete *,int couleur);
                int  couleurManquante(Sommet *,int couleur);
                int  inversion_couleur_manquante(Arete * a);
                int  estbiencolore(Arete *);
                Graphe* sous_graphe(int c1,int c2);


};
#endif


